package br.univali.programacao.carraid;

import java.awt.Image;

/**
 *
 * @author Murilo
 */
public class Sprite implements UpdateableObject {

    private Image imagem;
    private int fps;
    private int numeroDeImagens;
    private int larguraDosQuadros;
    private int alturaDosQuadros;
    private int quadroAtual;
    private AcumuladorDeTempo temporizadorDaAnimacao;

    public Sprite(Image imagem, int fps, int numeroDeImagens, int larguraDosQuadros, int alturaDosQuadros) {
        this.imagem = imagem;
        this.fps = fps;
        this.numeroDeImagens = numeroDeImagens;
        this.larguraDosQuadros = larguraDosQuadros;
        this.alturaDosQuadros = alturaDosQuadros;
        this.quadroAtual = 0;
        temporizadorDaAnimacao = new AcumuladorDeTempo(1000 / fps);
    }

    /**
     * @return the imagem
     */
    public Image getImagem() {
        return imagem;
    }

    /**
     * @return the fps
     */
    public int getFps() {
        return fps;
    }

    /**
     * @param fps the fps to set
     */
    public void setFps(int fps) {
        this.fps = fps;
    }

    /**
     * @return the numeroDeImagens
     */
    public int getNumeroDeImagens() {
        return numeroDeImagens;
    }

    /**
     * @param numeroDeImagens the numeroDeImagens to set
     */
    public void setNumeroDeImagens(int numeroDeImagens) {
        this.numeroDeImagens = numeroDeImagens;
    }

    /**
     * @return the larguraDosQuadros
     */
    public int getLarguraDosQuadros() {
        return larguraDosQuadros;
    }

    /**
     * @param larguraDosQuadros the larguraDosQuadros to set
     */
    public void setLarguraDosQuadros(int larguraDosQuadros) {
        this.larguraDosQuadros = larguraDosQuadros;
    }

    /**
     * @return the alturaDosQuadros
     */
    public int getAlturaDosQuadros() {
        return alturaDosQuadros;
    }

    /**
     * @param alturaDosQuadros the alturaDosQuadros to set
     */
    public void setAlturaDosQuadros(int alturaDosQuadros) {
        this.alturaDosQuadros = alturaDosQuadros;
    }

    /**
     * @return the quadroAtual
     */
    public int getQuadroAtual() {
        return quadroAtual;
    }

    /**
     * @param quadroAtual the quadroAtual to set
     */
    public void setQuadroAtual(int quadroAtual) {
        this.quadroAtual = quadroAtual;
    }

    @Override
    public void update(long tempoDoFrame) {
        temporizadorDaAnimacao.update(tempoDoFrame);
        if (temporizadorDaAnimacao.expirou()) {
            temporizadorDaAnimacao.reseta();
            quadroAtual++;
            if( quadroAtual == numeroDeImagens ) {
                quadroAtual = 0;
            }
        }
    }
}
